package com.autumn.sms.service.utils;

import java.util.Date;

import com.autumn.domain.entities.AbstractEntity;
import com.autumn.domain.entities.auditing.AbstractDefaultFullGmtEntity;
import com.autumn.mybatis.criterion.ISpecifyUpdateSection;
import com.autumn.mybatis.criterion.Query;
import com.autumn.mybatis.criterion.SpecifyUpdate;

/**
 * 审计工具
 * @author JuWa ▪ Zhang
 * @date 2017年12月20日
 */
public final class AuditUtils {

	/**
	 * 设置查询条件：过滤掉软删除
	 * @param query   查询实例
	 */
	public static void filterDelete(Query query) {
		query.eq("isDelete", false);
	}
	
	/**
	 * 设置软删除的更新表达式
	 * @param clazz   软删除实例对象所属类
	 * @param id  软删除实例ID
	 * @return
	 */
	public static ISpecifyUpdateSection softDeleteById(Class<? extends AbstractDefaultFullGmtEntity> clazz, long id) {
		SpecifyUpdate update = new SpecifyUpdate(clazz);
		update.set("isDelete", true).set("gmtDelete", new Date()).eq("id", id);
		return update.builderSection();
	}
	
	/**
	 * 根据主键ID生成查询条件
	 * @param clazz  需要查询的类型
	 * @param id  主键ID
	 * @return
	 */
	public static Query generateQueryById(Class<? extends AbstractEntity<Long>> clazz, long id) {
		Query query = new Query(clazz);
		query.eq("id", id);
		return query;
	}
}
